#include <iostream>

using namespace std;

const int N = 1e6 + 10;

int n;
int l[N], r[N];

//求深度
//1.空树的高度 0
//2.非空树的高度=我的高度+max(左子树的高度,右子树的高度)
// int dfs(int root)
// {
// 	return root == 0 ? 0 : max(dfs(l[root]), dfs(r[root])) + 1;
// }

int dfs(int root)
{
	if(!root) return 0;
	
	return max(dfs(l[root]), dfs(r[root])) + 1;
}

int main()
{
	cin >> n;
	for(int i = 1; i <= n; i++)
	{
		cin >> l[i] >> r[i];
	}

	//求深度
	cout << dfs(1) << endl;

	return 0;
}


